pwnable.kr-random

pwnable.kr random

涉及知识点:rand()函数。

题目描述

1
2
3
Daddy, teach me how to use random value in programming!

ssh random@pwnable.kr -p2222 (pw:guest)

题目的意思是在程序中使用随机值。

题目分析

  1. 同样,远程访问random用户。
    有三个文件:random、random.c、flag
  2. 查看random.c文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main(){
unsigned int random;
random = rand(); // random value!

unsigned int key=0;
scanf("%d", &key);

if( (key ^ random) == 0xdeadbeef ){
printf("Good!\n");
system("/bin/cat flag");
return 0;
}

printf("Wrong, maybe you should try 2^32 cases.\n");
return 0;
}

根据程序,只要输入的key值与random随机值异或等于0xdeadbeef,即可得到flag。

  1. 看rand()函数。

    rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 rand()会导致相同的随机数序列被生成。

也就是说,没有调用srand()函数,没有设置随机数种子,rand()函数就只会生成一个随机数,且不会变。

  1. 查看产生的随机数
1
2
3
4
5
6
7
8
#include <stdio.h>
int main()
{
unsigned int random;
random = rand();
printf("%d",random);
return 0;
}

运行得到1804289383,十六进制为0x6b8b4567.
与0xdeadbeef进行异或,得到3039230856,运行输入得到flag。

1
2
3
4
random@ubuntu:~$ ./random
3039230856
Good!
Mommy, I thought libc random is unpredictable...
文章目录
  1. 1. pwnable.kr random
    1. 1.1. 题目描述
    2. 1.2. 题目分析